package Level03;

public class Ticket extends Thread {
    //定义三个变量，分别用来记录是售票员手中面值 5,10 元，20 元 RMB 的张数；
    private static int small = 3;
    private static int middle = 0;
    private static int high = 0;
    //定义一个变量用来记录购票人手中一张 RMB 的面值；
    private Integer my;


    //定义一个构造方法，把购票人手中的人民币作为参数传递进去；

    public Ticket(int my) {
        this.my = my;
    }
    //重写 Thread 类的 run 方法；

    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + "开始购票");
            change();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //定义售票找零的方法：
    public void change() throws InterruptedException {
        synchronized (my) {
            //如果购票人给的 RMB 面值是 5 元的，卖票成功，打印卖票的信息；
            switch (my) {
                case 5:
                    small++;
                    System.out.println("这是用5元买票,买票成功,不需要找零");
                    break;
                case 10:
                    while (small < 1) {
                        System.out.println("找不开10元，等待");
                        my.wait();
                    }
                    small--;
                    System.out.println("这是用10元买票,买票成功,找你5元");
                    middle++;
                    break;
                case 20:
                    while (small < 3) {
                        System.out.println("找不开20元，等待");
                        my.wait();
                    }
                    small = small - 3;
                    System.out.println("这是用20元买票,买票成功,找你3张5元");
                    high++;
                    break;
            }
            Object.class.notifyAll();
        }
    }
}
